package com.maiko.maikoaiagent.rag;

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetriever;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrieverOptions;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 用于配置基于 DashScope 云端知识库的 RAG（检索增强生成）Advisor。
 *
 * 这其实就是阿里云知识库RAG，你那个LoveAppVectorStoreConfig不是从本地resource中读取的markdown然后就是RAG检索增强嘛，
 * 这个类就是从阿里云上面读取的markdown，当然前提是你创建了。
 *
 * @author: Maiko7
 * @create: 2025-06-15 19:15
 */
@Configuration  // 声明这是一个配置类，会被Spring容器自动识别和加载
@Slf4j          // 引入Lombok的日志功能，使用 log.info(...) 等日志方法
class LoveAppRagCloudAdvisorConfig {

    // 从应用配置中获取DashScope API密钥
    @Value("${spring.ai.dashscope.api-key}")
    private String dashScopeApiKey;

    /**
     * 创建一个基于阿里云 DashScope 的 RAG（检索增强生成）Advisor Bean
     * 用于在对话中结合知识库内容提升回答质量
     *
     * @return RetrievalAugmentationAdvisor类型的Bean，用于提供基于检索的增强建议
     */
    @Bean
    public Advisor loveAppRagCloudAdvisor() {
        // 创建DashScopeApi实例，使用从配置中获取的API密钥
        DashScopeApi dashScopeApi = new DashScopeApi(dashScopeApiKey);
        // 指定使用的知识库索引名称（需在 DashScope 控制台中提前创建）
        final String KNOWLEDGE_INDEX = "恋爱大师";
        // 创建文档检索器，用于从 DashScope 指定索引中检索相关知识文档
        DocumentRetriever documentRetriever = new DashScopeDocumentRetriever(dashScopeApi,
                DashScopeDocumentRetrieverOptions.builder()
                        .withIndexName(KNOWLEDGE_INDEX)
                        .build());
        // 构建并返回RetrievalAugmentationAdvisor实例，一个用于智能问答增强的Advisor组件
        return RetrievalAugmentationAdvisor.builder()
                .documentRetriever(documentRetriever)   // 配置检索器
                .build();   // 构建Advisor
    }
}

